using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using FiltronASP.Helpers.Constants;

namespace FiltronASP.Models.DAO.Interfaces.WIX
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>wix_filters</code>.
    /// </summary>
    public interface IWixFilterDAO : IGenericDAO<WixFilter, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie obiektow na podstawie silnika.
        /// </summary>
        /// <param name="engineId">silnik</param>
        /// <returns>rekordy o zadanym silniku lub null, gdy nie ma</returns>
        IQueryable<WixFilter> FindByEngine(int engineId);

        /// <summary>
        /// Pobieranie obiektow na podstawie typu.
        /// </summary>
        /// <param name="typeId">typ filtru</param>
        /// <returns>rekordy o zadanym typie lub null, gdy nie ma</returns>
        IQueryable<WixFilter> FindByType(int typeId);

        /// <summary>
        /// Pobieranie obiektow na podstawie silnika i modelu.
        /// </summary>
        /// <param name="engineId">silnik</param>
        /// <param name="modelId">model</param>
        /// <returns>rekordy o zadanym silniku i modelu lub null, gdy nie ma</returns>
        IQueryable<WixFilter> FindByEngineAndModel(int engineId, int modelId);
        
        /// <summary>
        /// Pobieranie obiektow na podstawie numeru Filtra..
        /// </summary>
        /// <param name="filterNumber">numer(nazwa) Filtra</param>
        /// <returns>Filtr o podanej przez user'a nazwie.</returns>
        IQueryable<WixFilter> FindByFilterNumber(string filterNumber);
        IQueryable<WixFilter> FindByFilterNumberEquals(string filterNumber);
        IQueryable<WixFilter> FindByFilterNumber(string filterNumber, Constants.TSearchInclusionMode searchMode);
        IQueryable<WixFilter> FindByFilterNumber(string filterNumber, Constants.TSearchInclusionMode searchMode, int limit);

        /// <summary>
        /// Pobieranie obiektow na podstawie wymiarow.
        /// </summary>
        /// <param name="height">wysokosc</param>
        /// <param name="width">szerokosc</param>
        /// <param name="length">dlugosc</param>
        /// <param name="outsideDiaTop">zewnetrzna gorna srednica</param>
        /// <param name="outsideDiaBottom">zewnetrzna dolna srednica</param>
        /// <param name="insideDiaTop">wewnetrzna gorna srednica</param>
        /// <param name="insideDiaBottom">wewnetrzna dolna srednica</param>
        /// <returns>rekordy o zadanych wymiarach lub null, gdy nie ma</returns>
        IQueryable<WixFilter> FindByDimensions(int? height, int? width, int? length, int? outsideDiaTop,
            int? outsideDiaBottom, int? insideDiaTop, int? insideDiaBottom);
    }
}
